In a discrete multitone (DMT) digital subscriber line data communications system, to maximize the channel utilization the number of bits on each subcarrier has to be optimized based on the subchannel signal-to-noise ratio (SNR). A bit loading algorithm is necessary to adaptively assign the different number of bits to each subcarrier according to the channel condition. The overall data rate depends on this bit assignment and also on the number of subcarriers. During the process of modem initialization, the information on the bit loading of each subcarrier and the total data rate has to be exchanged between the transmitter and receiver.
For practical DSP (digital signal processor) implementations, the system cost is generally determined by the instruction cycles per second and the memory size. Although DMT offers great flexibility and fine granularity, and use of a DSP provides a programmable solution, it still requires a lot of memory space and instruction cycles to practically implement the adaptive bit loading algorithm. The problem comes generally from three aspects. First, since the bit loading algorithm uses many different sizes of constellations, it requires big memory space to store the different bit-mapping tables. For example, it needs 2K words of memory space just for 1024-QAM bit mapping. If constellations have to cover from QPSK to 1024-QAM and bit-mapping tables are different for each constellation, it will require 4K SRAMs in total for the table look-up. Second, as the input to a general purpose DSP is in the format of bytes or words and DMT processes data in blocks, it may need several words of data for one frame of DMT input. However, since the number of bits on each tone is arbitrary, to adaptively load the data, the entire block of DMT data has to keep shifting according to the loading on each tone. Consequently, it consumes a lot of instruction cycles. Third, since the programs for loading different number of bits to a subcarrier are different, to dynamically change bit loading from one subcarrier to another subcarrier may need a lot of conditional subroutine calls and therefore costs a lot of instruction cycles.